import { createI18n, useI18n } from "vue-i18n";

// 系统自身的多语言信息
import localEn from "./en.ts";
import localZhCn from "./zh-cn.ts";

// 获取浏览器缓存的多语言类型
const defaultLocale = window.sessionStorage.getItem("LANGUAGE");

// 设置 i18n 配置
const i18n = createI18n({
  legacy: false, // 启用 Composition API 模式
  locale: defaultLocale || "zh-cn", // 默认语言
  messages: {
    "zh-cn": {
      // 可以在此添加自定义的中文翻译
      ...localZhCn,
    },
    en: {
      // 可以在此添加自定义的英文翻译
      ...localEn,
    },
  },
});

// 设置 i18n 文本
export const setI18n = (i18nCode: string, defaultText: string = "") => {
  const { t } = useI18n();
  const codes = i18nCode.split(".");

  // 优先使用 i18n
  if (t && i18nCode) return t(i18nCode);

  // 没有 i18n 时再使用默认值
  if (defaultText) return defaultText;

  // 没有 i18n 及默认值时再使用中文
  let value = JSON.parse(JSON.stringify(localZhCn));
  for (let i of codes) {
    if (!value[i]) return i18nCode;
    value = value[i];
  }
};

export const useLocalI18n = () => {
  const { locale, t } = useI18n();

  // 语言枚举数据
  const langOptions = [
    { name: "中文", code: "zh-cn", i18n: "setting.lang.ZHCN" },
    { name: "英文", code: "en", i18n: "setting.lang.EN" },
  ];

  // 设置语言
  const changeLanguage = (language: string) => {
    window.sessionStorage.setItem("LANGUAGE", language);
    locale.value = language;
  };

  // 设置 i18n 文本
  const setI18n = (i18nCode: string, defaultText: string = "") => {
    const codes = i18nCode.split(".");

    // 优先使用 i18n
    if (t && i18nCode) return t(i18nCode);

    // 没有 i18n 时再使用默认值
    if (defaultText) return defaultText;

    // 没有 i18n 及默认值时再使用中文
    let value = JSON.parse(JSON.stringify(localZhCn));
    for (let i of codes) {
      if (!value[i]) return i18nCode;
      value = value[i];
    }
  };

  return {
    langOptions,
    changeLanguage,
    setI18n,
  };
};

export default i18n;
